﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using Public;

namespace DAL
{
    public class XuatKho_DAL
    {
        Connection conn = new Connection();
        XuatKho_PB xk_pb = new XuatKho_PB();

        #region "Lấy DS Khách Hàng"
        public DataTable LayDSKH()
        {
            return conn.LoadData("select MAKH,TENKH from KHACHHANG");
        }
        #endregion

        #region "Lấy DS Nhân viên"
        public DataTable LayDSNV()
        {
            return conn.LoadData("select MANHANVIEN,TENNHANVIEN from NHANVIEN");
        }
        #endregion

        #region "Lấy DS chi tiết xuất kho"
        public DataTable LayDSCTXuatKho()
        {
            return conn.LoadData("select ID,MAPHIEUXUAT,MAHANG,vt.TENVATTU,ctn.MAKHO,dvt.DIENGIAI,ctn.SOLUONG,DONGIA,THANHTIEN,HANSUDUNG from CHITIETXUAT ctn,TONKHO tk,VATTU vt,DONVITINH dvt where ctn.MAHANG=tk.MAVATTU and vt.DONVITINH=dvt.MADONVITINH and tk.MAVATTU=vt.MAVATTU and dvt.MADONVITINH=VT.DONVITINH and MAPHIEUXUAT='XXXX'");
        }
        #endregion

        #region "Lấy DS Tồn Kho"
        public DataTable LayDSTonKho()
        {
            return conn.LoadData("SELECT VATTU.MAVATTU, VATTU.TENVATTU,VATTU.DONGIABAN,DONVITINH.DIENGIAI FROM VATTU INNER JOIN DONVITINH ON VATTU.DONVITINH = DONVITINH.MADONVITINH");
        }
        #endregion

        #region "Lấy DS Kho"
        public DataTable LayDSKho()
        {
            return conn.LoadData("select MAKHO,TENKHO from KHO");
        }
        #endregion

        #region "Thêm phiếu xuất"
        public int ThemPhieuXuat(XuatKho_PB xk_pb)
        {
            int nparameter = 9;
            string[] name = new string[nparameter];
            object[] value = new object[nparameter];
            name[0] = "@mapx"; value[0] = XuatKho_PB.MaPX;
            name[1] = "@makh"; value[1] = XuatKho_PB.MaKH;
            name[2] = "@diachi"; value[2] = XuatKho_PB.DiaChi;
            name[3] = "@nguoinhan"; value[3] = XuatKho_PB.NguoiNhan;
            name[4] = "@lydoxuat"; value[4] = XuatKho_PB.LyDoXuat;
            name[5] = "@nhanvien"; value[5] = XuatKho_PB.NhanVien;
            name[6] = "@ngayhachtoan"; value[6] = XuatKho_PB.NgayHachToan;
            name[7] = "@ngaychungtu"; value[7] = XuatKho_PB.NgayChungTu;
            name[8] = "@sochungtu"; value[8] = XuatKho_PB.MaPX;
            string sql = "insert into PHIEUXUAT values (@mapx,@makh,@nguoinhan,@diachi,@lydoxuat,@nhanvien,@ngayhachtoan,@ngaychungtu,@sochungtu)";
            return conn.Update(sql, name, value, nparameter);
        }
        #endregion

        #region "Sửa phiếu xuất"
        public int SuaPhieuXuat(XuatKho_PB xk_pb)
        {
            int nparameter = 9;
            string[] name = new string[nparameter];
            object[] value = new object[nparameter];
            name[0] = "@mapx"; value[0] = XuatKho_PB.MaPX;
            name[1] = "@makh"; value[1] = XuatKho_PB.MaKH;
            name[2] = "@diachi"; value[2] = XuatKho_PB.DiaChi;
            name[3] = "@nguoinhan"; value[3] = XuatKho_PB.NguoiNhan;
            name[4] = "@lydoxuat"; value[4] = XuatKho_PB.LyDoXuat;
            name[5] = "@nhanvien"; value[5] = XuatKho_PB.NhanVien;
            name[6] = "@ngayhachtoan"; value[6] = XuatKho_PB.NgayHachToan;
            name[7] = "@ngaychungtu"; value[7] = XuatKho_PB.NgayChungTu;
            name[8] = "@sochungtu"; value[8] = XuatKho_PB.MaPX;
            string sql = "update PHIEUXUAT set MAKH=@makh,DIACHI=@diachi,NGUOINHAN=@nguoinhan,LYDOXUAT=@lydoxuat,NHANVIEN=@nhanvien,NGAYHACHTOAN=@ngayhachtoan,NGAYCHUNGTU=@ngaychungtu,SOCHUNGTU=@sochungtu where MAPX=@mapx";
            return conn.Update(sql, name, value, nparameter);
        }
        #endregion

        #region "Xóa phiếu nhập kho"
        public int XoaXuatKho(XuatKho_PB xk_pb)
        {
            int nparameter = 1;
            string[] name = new string[nparameter];
            object[] value = new object[nparameter];
            name[0] = "@mapx"; value[0] = XuatKho_PB.MaPX;
            string sql = " delete from PHIEUXUAT where MAPX=@mapx";
            return conn.Update(sql, name, value, nparameter);
        }
        public int XoaXuatKho1(XuatKho_PB xk_pb)
        {
            int nparameter = 1;
            string[] name = new string[nparameter];
            object[] value = new object[nparameter];
            name[0] = "@mapx"; value[0] = XuatKho_PB.MaPX;
            string sql = " delete from CHITIETXUAT where MAPHIEUXUAT=@mapx";
            return conn.Update(sql, name, value, nparameter);
        }
        #endregion

        #region "Thêm chi tiết xuất kho"
        public int ThemCTXuat(XuatKho_PB xk_pb)
        {
            int nparameter = 7;
            string[] name = new string[nparameter];
            object[] value = new object[nparameter];
            name[0] = "@id"; value[0] = XuatKho_PB.ID;
            name[1] = "@mapx"; value[1] = XuatKho_PB.MaPX;
            name[2] = "@mahang"; value[2] = XuatKho_PB.MaHang;
            name[3] = "@makho"; value[3] = XuatKho_PB.MaKho;
            name[4] = "@soluong"; value[4] = XuatKho_PB.SoLuong;
            name[5] = "@thanhtien"; value[5] = XuatKho_PB.ThanhTien;
            name[6] = "@dongia"; value[6] = XuatKho_PB.DonGia;
            string sql = "insert into CHITIETXUAT values (@id,@mapx,@mahang,@makho,@soluong,@thanhtien,@dongia)";

            return conn.Update(sql, name, value, nparameter);
        }
        #endregion

        #region "Sửa chi tiết xuất kho"
        public int SuaCTXuat(XuatKho_PB xk_pb)
        {
            int nparameter = 6;
            string[] name = new string[nparameter];
            object[] value = new object[nparameter];
            name[0] = "@id"; value[0] = XuatKho_PB.ID;
            name[1] = "@mahang"; value[1] = XuatKho_PB.MaHang;
            name[2] = "@makho"; value[2] = XuatKho_PB.MaKho;
            name[3] = "@soluong"; value[3] = XuatKho_PB.SoLuong;
            name[4] = "@thanhtien"; value[4] = XuatKho_PB.ThanhTien;
            name[5] = "@dongia"; value[5] = XuatKho_PB.DonGia;
            string sql = "update CHITIETXUAT set MAHANG=@mahang,MAKHO=@makho,SOLUONG=@soluong,DONGIA=@dongia,THANHTIEN=@thanhtien where ID=@id";

            return conn.Update(sql, name, value, nparameter);
        }
        #endregion

        #region "Xóa CT xuất kho"
        public int XoaCTXuatKho(XuatKho_PB xk_pb)
        {
            int nparameter = 1;
            string[] name = new string[nparameter];
            object[] value = new object[nparameter];
            name[0] = "@id"; value[0] = XuatKho_PB.ID;
            string sql = "delete from CHITIETXUAT where ID=@id";
            return conn.Update(sql, name, value, nparameter);
        }
        #endregion

        #region "Lấy DS Phiếu xuất kho"
        public DataTable LayDSPhieuXuat()
        {
            string sql = "SELECT  PHIEUXUAT.MAPX, KHACHHANG.TENKH, PHIEUXUAT.NGUOINHAN, PHIEUXUAT.DIACHI, PHIEUXUAT.LYDOXUAT, PHIEUXUAT.NHANVIEN, PHIEUXUAT.NGAYHACHTOAN, PHIEUXUAT.NGAYCHUNGTU, PHIEUXUAT.SOCHUNGTU, PHIEUXUAT.MAKH"
                        +" FROM PHIEUXUAT INNER JOIN KHACHHANG ON PHIEUXUAT.MAKH = KHACHHANG.MAKH";
            return conn.LoadData(sql);
        }
        #endregion

        #region "Tìm theo mã phiếu xuất"
        public DataTable TimMaPhieuXuat(string ma)
        {
            string sql = string.Format("select ID,MAPHIEUXUAT,MAHANG,ctn.MAKHO,ctn.SOLUONG,THANHTIEN,DONGIA,vt.TENVATTU,kh.TENKHO,dvt.DIENGIAI " +
                        " from CHITIETXUAT ctn,KHO kh,VATTU vt,DONVITINH dvt " +
                        " where ctn.MAHANG=vt.MAVATTU and ctn.MAKHO=kh.MAKHO and vt.DONVITINH=dvt.MADONVITINH and ctn.MAPHIEUXUAT='{0}'", ma);
            return conn.LoadData(sql);
        }
        #endregion

        #region "Tìm theo ID Chi tiết phiếu xuất"
        public DataTable TimID(XuatKho_PB xk_pb)
        {
            string sql = string.Format("select * from CHITIETXUAT where MAPHIEUXUAT='{0}'", XuatKho_PB.MaPX);
            return conn.LoadData(sql);
        }
        #endregion

        #region "Tăng mã tự động chi tiết xuất"
        public string NextID_CTX()
        {
            return NextID_PB.NextID(conn.GetLastID("CHITIETXUAT", "ID"), "CTX");
        }
        #endregion

        #region "Tăng mã tự động phiếu xuất"
        public string NextID_PX()
        {
            return NextID_PB.NextID(conn.GetLastID("PHIEUXUAT", "MAPX"), "PX");
        }
        #endregion

        #region Sửa tồn kho
        public int SuaTonKho(XuatKho_PB xk_pb)
        {
            int nparameter = 3;
            string[] name = new string[nparameter];
            object[] value = new object[nparameter];
            name[0] = "@mahang"; value[0] = XuatKho_PB.MaHang;
            name[1] = "@kho"; value[1] = XuatKho_PB.MaKho;
            name[2] = "@soluong"; value[2] = XuatKho_PB.SoLuong;
            string sql = "update TONKHO set SOLUONG=@soluong where MAVATTU=@mahang and KHO=@kho";
            return conn.Update(sql, name, value, nparameter);
        }
        #endregion

        #region Kiểm tra mã hàng cả kho đó có trong bảng tôn kho chưa
        //kiem tra ton tai
        public bool CheckExists(string mavattu, string makho)
        {
            if ((conn.CheckExistValues("TONKHO", "MAVATTU", mavattu, makho)))
                return true;
            return false;
        }
        #endregion

        #region Lấy số lượng tồn kho
        public int LaySLTonKho(string mavattu, string makho)
        {
            string sql = string.Format("select * from TONKHO where MAVATTU='{0}' and KHO='{1}'", mavattu, makho);
            return conn.LaySLTonKho(sql);
        }
        #endregion

    }
}
